const express = require('express')

const app = express()

var bodyParser = require('body-parser') //处理表单数据 

// let app = http.createServer(function(req,res){
// 	res.end('Hello World')
// })

// 导入cors
const cors = require('cors')
// 全局挂载
app.use(cors())

// Multer 是一个 node.js 中间件，用于处理 multipart/form-data 类型的表单数据，它主要用于上传文件。
const multer = require("multer");
// 在server服务端下新建一个public文件，在public文件下新建upload文件用于存放图片
const upload = multer({
	dest: './public/upload'
})
app.use(upload.any())
// 静态托管
app.use(express.static("./public"));

// parse application/x-www-form-urlencoded
// 当extended设置为false时，值为数组或为字符串；当为true时，可以为任何类型
app.use(bodyParser.urlencoded({ extended: false }))

// parse application/jsons
app.use(bodyParser.json())

// 处理错误的中间件
app.use((req, res, next) => {
	// status 0 为成功，1为失败
	res.cc = (err, status = 1) => {
		res.send({
			status,
			// 判断error是错误对象还是字符串
			message: err instanceof Error ? err.message : err
		})
	}

	next()
})

const jwtconfig = require('./jwt-config/index.js')
const { expressjwt: jwt } = require('express-jwt')

// app.use(jwt({
// 	secret: jwtconfig.jwtSecretKey,
// 	algorithms: ['HS256']
// }).unless({
// 	path: [/^\/api\//]
// }))

const loginRouter = require('./router/login.js')
const Joi = require('joi')
const userRouter = require('./router/userInfo.js')
const settingRouter = require('./router/setting')

app.use('/api', loginRouter)
app.use('/user', userRouter)
app.use('/setting', settingRouter)

// 对不符合joi规则的情况进行报错
app.use((err, req, res, next) => {
	if (err instanceof Joi.ValidationError) return res.cc(err)
})

app.listen(8099, () => {
	console.log('程序已经运行在http://127.0.0.1:8099')
}) 